home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / msh-156.lha / doc / dev.man next >
Text File  |  1996-12-22  |  15KB  |  331 lines

  1.  
  2.      messydisk.device()    Amiga Programmer's Manual     messydisk.device()
  3.  
  4.  
  5.  
  6.      ›1mSYNOPSYS 
  7.           ›0m#include <exec/io.h>
  8.           #include <devices/trackdisk.h>
  9.           #include <dev.h>
  10.  
  11.           OpenDevice("messydisk.device", Unit, IOExtTD, Flags);
  12.           BeginIO(IOExtTD);
  13.           CloseDevice(IOExtTD);
  14.  
  15.      ›1mUSAGE 
  16.           ›0mMessydisk.device  can  be  used instead of trackdisk.device.
  17.           All current trackdisk.device commands are  supported.    The
  18.           only  functional difference is the format of the disk, which
  19.           is compatible with messydos systems.  
  20.  
  21.           For version 37.15+: If your floppy  drive  is  a  half-speed
  22.           high-density  drive  (as  in  the  Amiga 4000 and some Amiga
  23.           3000s),  messydisk.device   will   notice   and   write   HD
  24.           (high-density)   floppies   in   HD   mode   and  normal  DD
  25.           (double-density, which is half of high-density) in DD  mode.
  26.           It  is  not  possible  to  write HD disks in DD mode without
  27.           covering the extra hole in the  floppy  that  indicates  its
  28.           HD-ness.  This  is a hardware limitation that also holds for
  29.           AmigaDOS format disks.  
  30.  
  31.      ›1mPROBLEMS 
  32.           ›0mWhen messydisk.device can read  disks  properly,  but  hangs
  33.           when  attempting  to  write, the problem is usually that the
  34.           disk index interrupt does not come through for some  reason.
  35.           Possible causes  are:  1.  Hardware defects.  Normal use for
  36.           AmigaDOS formatted disks is  not  necessaryly  prevented  by
  37.           this.  2.   Someone stealing the interrupt vector.  This has
  38.           been reported for at least one harddisk driver.  Also (older
  39.           versions of) AmigaOS 2.0 do(es) this.  
  40.  
  41.      ›1mCOMMANDS 
  42.           ›0mSupported commands are: 
  43.  
  44.           = CMD_INVALID     = CMD_RESET       * CMD_READ
  45.           * CMD_WRITE       * CMD_UPDATE      = CMD_CLEAR
  46.           = CMD_STOP        = CMD_START       = CMD_FLUSH
  47.  
  48.             TD_MOTOR        = TD_SEEK         * TD_FORMAT
  49.             TD_REMOVE         TD_CHANGENUM      TD_CHANGESTATE
  50.             TD_PROTSTATUS     TD_RAWREAD        TD_RAWWRITE
  51.             TD_GETDRIVETYPE   TD_GETNUMTRACKS = TD_ADDCHANGEINT
  52.           = TD_REMCHANGEINT = TD_GETGEOMETRY    TD_EJECT
  53.  
  54.           * ETD_WRITE       * ETD_READ          ETD_MOTOR
  55.           = ETD_SEEK        * ETD_FORMAT      * ETD_UPDATE
  56.           = ETD_CLEAR         ETD_RAWREAD       ETD_RAWWRITE
  57.  
  58.           The commands marked with * are handled in its own format  by
  59.           messydisk.   The  commands  marked  with  =  are  handled by
  60.           messydisk in the same way as trackdisk supposed  is  to  do.
  61.           The  other  commands  are sent straight through to trackdisk
  62.           and are subject to all its flaws and features.  
  63.  
  64.  
  65.      Rhialto, KosmoSoft               -1-                Version 37.16/1.56
  66.  
  67.  
  68.      messydisk.device()    Amiga Programmer's Manual     messydisk.device()
  69.  
  70.  
  71.           The extended commands support the disk  change  count  only.
  72.           The  sector  label pointer (iotd_SecLabel) is ignored, since
  73.           messy formatted disks don't have any label areas.  
  74.  
  75.      ›1mUNIT NUMBERS 
  76.           ›0mThe messydisk.device supports 4 physical units: 0 through 3.
  77.           These are the same as units  0  ..  3  of  trackdisk.device.
  78.           However, higher unit numbers can be given, if you don't have
  79.           control over the OpenDevice flags.  
  80.  
  81.           Units 0..3 are default.  
  82.  
  83.           Units   4..7   internally   set   the   IOMDF_40TRACKS   and
  84.           IOMDF_FIXFLAGS flags, i.e.   this  always  forces  40  track
  85.           mode.  
  86.  
  87.           Units   8..11  internally  clears  IOMDF_40TRACKS  and  sets
  88.           IOMDF_FIXFLAGS, i.e.  this does not allow 40 track mode.  
  89.  
  90.      ›1mOPENDEVICE FLAGS 
  91.           ›0mTDF_ALLOW_NON_3_5: Allows opening 40 track drives.  Ignored,
  92.           since it is the default behaviour which cannot be disabled.  
  93.  
  94.           IOMDF_FIXFLAGS: Normally, the flags as set  in  IO  requests
  95.           override flags  set  at OpenDevice time.  If you supply this
  96.           flag however, any IOMD* flags  in  an  IO  request  will  be
  97.           ignored.   Note  that bit cannot be set in IO requests since
  98.           it is a bit number higher than 7.  
  99.  
  100.           The IOMDF_40TRACKS flag may  also  be  given  in  the  flags
  101.           argument   of  OpenDevice;  you  should  include  the  above
  102.           mentioned IOMDF_FIXFLAGS flag as well for it to  be  of  any
  103.           use.  
  104.  
  105.      ›1mIO REQUEST FLAGS 
  106.           ›0mThe  io_Flags  field of an IOStdReq or IOExtTD structure may
  107.           contain the following flags: 
  108.  
  109.           IOF_QUICK: This flag is supported for only a few commands.  
  110.  
  111.           IOTDF_INDEXSYNC: For ETD/CMD_RAWREAD and _WRITE.  
  112.  
  113.           IOMDF_40TRACKS:  This  flag  is  for  ETD/CMD_READ,  _WRITE,
  114.           _FORMAT, and  _SEEK.   If set, treat the disk as 40 cylinder
  115.           media.  If it happens to be in an 80 cylinder  drive,  every
  116.           other  cylinder  will be skipped to use the same cylinders a
  117.           40-cylinder drive would.  Normally you  set  or  clear  this
  118.           flag once at the time you read the bootblock and examine its
  119.           layout information.    It is guaranteed that messydisk won't
  120.           change this flag.    IOMDF_40TRACKS  is  not  supported  for
  121.           ETD/TD_RAWREAD  and _RAWWRITE, since these are considered to
  122.           be "diagnostic" functions and therefore should be as raw  as
  123.           possible.  
  124.  
  125.      ›1mDISK FORMAT 
  126.           ›0mThe  disk  format  used is compatible with messydos systems.
  127.           Both 40 and 80 cylinder media  are  supported.    There  are
  128.           normally  9  sectors  (max  10) per track and two tracks per
  129.  
  130.  
  131.      Rhialto, KosmoSoft               -2-                Version 37.16/1.56
  132.  
  133.  
  134.      messydisk.device()    Amiga Programmer's Manual     messydisk.device()
  135.  
  136.  
  137.           cylinder.  For high-density drives 18 sectors (max  21)  per
  138.           track are supported.  
  139.  
  140.           (Outdated)  single-sided  disks  can  only  be  read  if the
  141.           driving  software  is  prepared  to  treat  them  as  normal
  142.           double-sided disks, and skip the sides that are not actually
  143.           present.  On the other hand, the number of sectors per track
  144.           may  vary  up  to  10  or  21.  If  the number of sectors is
  145.           different from the default value (9 or 18), then track 0  on
  146.           side   0   must  be  read  first  before  this  is  properly
  147.           recognised.  It is then  assumed  that  all  tracks  on  the
  148.           entire disk  have  the  same  number  of  sectors.   So, all
  149.           position calculations are based on the layout  of  the  very
  150.           first track.  
  151.  
  152.           --- Index pulse  ------------------------------------.
  153.                                                                |
  154.               40 * $4e    GAP 1A  ($9254 encoded)              |
  155.               12 * $00            ($AAAA encoded)              |
  156.                3 * $c2    SYNC    ($5224 encoded)              |
  157.                1 * $fc    index mark           ($5552)         |
  158.                                                                |
  159.               40 * $4e    GAP 1B  ($9254 encoded)              |
  160.                                                                |
  161.           --- First Sector -----------------------------.      |
  162.                                                         |      |
  163.               12 * $00    GAP 2   ($AAAA encoded)       |      |
  164.            |   3 * $a1    SYNC    ($4489 encoded)       |      |
  165.            |                                            |      |
  166.            |   1 * $fe    ID-Address Mark   -. ($5554)  |      |
  167.            |  track                          |          |      |
  168.            |  side                           |          |      |
  169.            |  sector                          > ID      |      |
  170.            |  length (0=128,1=256,2=512 etc.)|  Field   |  S   |
  171.            -> CRC 1                          |          |  e   |  T
  172.            -> CRC 2                         -'          |  c   |  r
  173.                                                          > t    > a
  174.               22 * $4e    GAP 3A  ($9254 encoded)       |  o   |  c
  175.               12 * $00    GAP 3B  ($AAAA encoded)       |  r   |  k
  176.            |   3 * $a1    SYNC    ($4489 encoded)       |      |
  177.            |                                            |      |
  178.            |   1 * $fb    DATA-Adress Mark  -. ($5545)  |      |
  179.            |  512 bytes data                  > DATA    |      |
  180.            -> CRC 1                          |  Field   |      |
  181.            -> CRC 2                         -'          |      |
  182.                                                         |      |
  183.               78 * $4e    GAP 4   ($9254 encoded)       |      |
  184.            or 40 * $4e    GAP 4   ($9254 encoded)       |      |
  185.           ----------------------------------------------'      |
  186.                                                                |
  187.            ...... at most 20 more sectors .......              |
  188.                                                                |
  189.               rest  $4e up to 6250 or 12500 bytes ($9254)      |
  190.           -----------------------------------------------------'
  191.  
  192.      ›1mDEVIATIONS 
  193.           ›0mThe TD_REMCHANGEINT command works.  (It doesn't with the 1.2
  194.           or 1.3 trackdisk.device).  
  195.  
  196.  
  197.      Rhialto, KosmoSoft               -3-                Version 37.16/1.56
  198.  
  199.  
  200.      messydisk.device()    Amiga Programmer's Manual     messydisk.device()
  201.  
  202.  
  203.  
  204.           The   messydisk   Unit   structure   does   not   look  like
  205.           TDU_PublicUnit at all.  
  206.  
  207.           In some situations, error returns may be different  or  less
  208.           specific.  
  209.  
  210.           Data  buffers  to be read or written currently don't need to
  211.           be in Chip memory.  
  212.  
  213.           When you format the first track(s) of the disk,  the  number
  214.           of sectors per track is guessed best as possible.  Since you
  215.           must  always  format  entire  tracks  at a time, this almost
  216.           uniquely determines the number of sectors you want  on  each
  217.           track; This is not perfect, however.  
  218.  
  219.           All other tracks are formatted the same as the first one.  
  220.  
  221.           When  formatting track 0, messydisk.device attempts to guess
  222.           the desired number of tracks as follows.  
  223.  
  224.           * If the length will fit on one track (i.e. is <= 10  or  21
  225.           sectors), then this will be chosen.  
  226.  
  227.           *  If  the  length is at most 80 sectors, track lengths from
  228.           8-10 or 15-21 sectors will be tried; the one that results in
  229.           a whole number of tracks is chosen.  Example: formatting  30
  230.           HD sectors will be 3 tracks of 10, and 18 DD sectors will be
  231.           2  tracks  of  9.  The result of formatting 40 DD sectors is
  232.           undefined.  
  233.  
  234.           * If no track length has  been  chosen  yet,  the  one  most
  235.           recently chosen is used.  
  236.  
  237.           Note  that  releases prior to 37.15 were more restrictive in
  238.           this  regard,  allowing  no  more  than  39  sectors  to  be
  239.           formatted in any case.  
  240.  
  241.           When  a  disk  with  more or less than 9 (or 18) sectors per
  242.           track is read, you must first issue a CMD_READ  command  for
  243.           the first  sector(s)  of  the  disk.   When track 0 is read,
  244.           messydisk.device determines how many sectors there are on  a
  245.           track.  This number is then used afterwards when calculating
  246.           the tracks  and  sides  of  other sectors.  So, this is very
  247.           important.  But for those (virtually impossible) cases where
  248.           not all tracks have the same number of sectors, all  sectors
  249.           (up  to  the  maximum supported) that were read on any track
  250.           will be written back.  Fortunately, all currently known file
  251.           systems have a bootblock at track 0, side  0,  so  they  all
  252.           adapt transparently.  
  253.  
  254.      ›1mCAVEATS 
  255.           ›0mThe (outdated) TD_REMOVE command is routed to trackdisk.  As
  256.           a  result of this, only one disk remove interrupt (per unit)
  257.           may  be  installed  (with  this  command),  whether  through
  258.           trackdisk or  messydisk.    (This  seems  to  have  been the
  259.           original  intention  of  TD_REMOVE.)  Of   course,   current
  260.           programs should use TD_ADDCHANGEINT.  
  261.  
  262.  
  263.      Rhialto, KosmoSoft               -4-                Version 37.16/1.56
  264.  
  265.  
  266.      messydisk.device()    Amiga Programmer's Manual     messydisk.device()
  267.  
  268.  
  269.      ›1mAMIGAOS 2›0m.›1m0›0m+ ›1mCOMPATIBILITY 
  270.           ›0mIf   messydisk.device   detects   that  a  2.0+  version  of
  271.           trackdisk.device  is  available,  it  uses  the  TD_RAWWRITE
  272.           command  to  write  to  the  disk  instead of banging on the
  273.           hardware itself.      The   result    is    better    future
  274.           compatibility.  
  275.  
  276.      ›1mUTILITIES 
  277.           ›0mA  separate  program  called  Ignore  is supplied, which may
  278.           suppress the CRC check in any currently open unit.  When the
  279.           unit is definitively closed and later reopened, ignoring CRC
  280.           mismatches again has its default value of No.  
  281.  
  282.           Usage: ignore <unitnr> <YES/NO>
  283.  
  284.           If you only give the unit number, ignore will output  either
  285.           Yes  or  No, reflecting whether CRC mismatches currently are
  286.           ignored.  Additionally, if Yes is printed  the  exit  status
  287.           will be  the  AmigaDOS  warn  level  (5).  This is useful in
  288.           scripts.  
  289.  
  290.           This program can be useful when you  wish  to  recover  data
  291.           from a  damaged  or marginal disk.  Sometimes text files may
  292.           be usable even if there are a few errors in them.  
  293.  
  294.      ›1mBUGS 
  295.           ›0mWith AmigaOS 2.0, messydisk.device versions  prior  to  1.34
  296.           are  unable  to  write  to  disks  because  the  disk  index
  297.           interrupt does not come through for some  reason.    Another
  298.           situation  where this interrupt gets "stolen" have also been
  299.           observed by someone.  
  300.  
  301.      ›1mAUTHORS 
  302.           ›0mMessydisk is written by ›3mSourcerer ›0mOlaf ›3mRhialto ›0mSeibert.  The
  303.           low-level   writing  part  was  originally  done  by  Werner
  304.           Günther. Used with permission.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.      Rhialto, KosmoSoft               -5-                Version 37.16/1.56
  330.  
  331.